"""
人物信息json格式化输出
1.创建大模型对象
2.创建消息模板 定义变量 question  output_format
3.构建pydantic下BaseModel的数据模型子类(数据对象) Person
4.构建输出解析对象JsonOutputParser，让参数pydantic_object绑定数据对象
   解析对象得取get_format_instructions()方法得数据格式样例
5.创建链对象
6.调用连的invoke方法  传递信息模型需要2个参数： question  output_format
"""

from model_utils import getLLM
from pydantic import BaseModel,Field
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser

llm = getLLM()

template = ChatPromptTemplate([
    ("system","使用中文回答,输出格式{format_eg}"),
    ("human","{question}")
])

class Person(BaseModel):
    name:str=Field(description="人物姓名")
    job:str=Field(description="职业")

parser = JsonOutputParser(pydantic_object=Person)
format_eg = parser.get_format_instructions()

chain = template | llm | parser

r = chain.invoke({"question":"马云","format_eg":format_eg})
print(r)